<?php

namespace app\service;

use app\models\cacheModel\AdminRoleModel as AdminRoleCacheModel;
use app\models\tableModel\AdminRoleModel as AdminRoleDBModel;
use yii\base\ActionFilter;
use \yii\console\Exception;

/**
 * 后台检测用户权限类
 * ©JEES
 */
class AuthBackendService extends ActionFilter
{

    /**
     *
     * @param \yii\base\Action $action
     * @return bool
     * @throws Exception
     */
    public function beforeAction($action)
    {

        // 看是否登录了
        if (\Yii::$app->admin->isGuest) {
            throw new Exception('会话过期，请先登录您的账号', 401);
        }


        // 获取下当前登录的用户角色ID
        $roleId = \Yii::$app->admin->identity->role_id;

        // 如果是管理员角色直接执行
        if (AdminRoleDBModel::isSuper($roleId)) return true;

        // 获取下cache中的角色信息
        $adminRoleDetail = AdminRoleCacheModel::loadModelDB($roleId);
        $authList = $adminRoleDetail->getAuthRoteList();

        // 如果是空的就证明确实这个角色无权限 | 可能缓存没有 在getRoleInfo 方法已做从表内获取
        if (!$authList || empty($authList)) {

            throw new Exception('您暂无任何权限', 403);
        }

        // 路由 + 转换
        $route = '/' . $action->controller->getRoute();
        // 检测下当前要跳转的路由在列表中吗
        if (!in_array($route, $authList)) {

            throw new Exception('您暂无权限访问此页面', 403);
        }

        return true;
    }
}
